package com.bnz.controller;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bnz.entity.Emp;
import com.bnz.entity.PageResult;
import com.bnz.entity.R;
import com.bnz.service.IDeptService;
import com.bnz.service.IEmpService;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.data.web.SpringDataWebProperties;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;

import java.awt.print.Pageable;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author wangye
 * @since 2023-03-21
 */
@RestController
@RequestMapping("/emp")
public class EmpController {
    @Autowired
    private IEmpService empService;
    @Autowired
    private IDeptService deptService;
    // 1. 查询所有员工
    @GetMapping("/list")
    public R findAll(){
        // 1.1 查询所有员工
        List<Emp> emps = empService.list();
        // 1.2 给每个员工找到对应的部门
        for (Emp emp : emps) {
            emp.setDname(deptService.getById(emp.getDid()).getDname());
        }
        // 1.3 返回
        return R.ok().put("list",emps);
    }

    // 2. 分页查询
    @GetMapping("/findByPage")
    public R findByPage(int page, int pageSize){
        // 2.1 分页查询
        Page<Emp> empPage = empService.page(new Page<>(page, pageSize));
        // 2.2 使用getRecords方法得到List<Emp>
        List<Emp> records = empPage.getRecords();
        // 2.3 为每个员工找到对应的部门
        for (Emp record : records) {
            record.setDname(deptService.getById(record.getDid()).getDname());
        }
        // 2.4 返回
        return R.ok().put("pr",empPage);
    }
    // 3. 条件查询带分页
    @RequestMapping("/search")
    public R search(int page, int pageSize, @RequestBody Emp emp){
        // 3.1 封装查询条件
        QueryWrapper<Emp> wrapper = new QueryWrapper<>();
        if (StringUtils.isNotBlank(emp.getEname())) {
            wrapper.like("ename",emp.getEname());
        }
        if (StringUtils.isNotBlank(emp.getCity())){
            wrapper.like("city",emp.getCity());
        }
        wrapper.eq(emp.getDid() != null && emp.getDid() != 0,"did",emp.getDid());
        // 3.2 查询所有员工
        Page<Emp> empPage = empService.page(new Page<>(page, pageSize), wrapper);
        // 3.3 给每个员工找到对应的部门
        List<Emp> emps = empPage.getRecords();
        for (Emp emp1 : emps) {
            emp1.setDname(deptService.getById(emp1.getDid()).getDname());
        }
        // 3.4 返回
        return R.ok().put("pr",empPage);
    }
}
